Android OpenGL的简单使用(3):常用API

Posted by alonealice on 2020-12-25

缓冲区

OpenGL ES 中存在着三种缓冲区

1
2
3
颜色缓冲区(COLOR_BUFFER) ————也叫帧缓冲区(FRAME_BUFFER),包含了颜色索引或者RGBA颜色数据
- 深度缓冲区(DEPTH_BUFFER) ————存储每个像素的深度值,当启动深度测试时,片段像素深度值和深度缓冲区深度值进行比较,决定片段哪些像素点数据可以替换到颜色缓冲区中
- 模板缓冲区 (STENCIL_BUFFER)————与深度缓冲大小相同,通过设置模版缓冲每个像素的值,我们可以指定在渲染的时候只渲染某些像素,从而可以达到一些特殊的效果

glClearColor

设置颜色缓冲区的清理值。

glClearColor(float red, float green, float blue, float alpha) 指明红、绿、蓝、alpha 的值并通过glClear 来清理颜色缓冲区,被glClearColor 指明的值属于区间[0, 1]。

glClearDepth

设置深度缓冲区的清理值。

glClearDepth(float depth) 方法指明深度值,并通过glClear 来清理深度缓冲区。glClearDepth 指明的值属于区间[0, 1]。深度值大于预设值的像素不会被绘制出来。

glClearStencil

设置模板缓冲区的清理值。

glClearStencil(int s) 方法设置模板缓冲区时的索引值,s 为2m-1,其中m是模板缓冲区中的bit 数。

glClear

清理缓冲区,并设置为预设值。

glClear(int mask) 方法设置模板缓冲区时的索引值,s 为2m-1,其中m是模板缓冲区中的bit 数。

mask的值有以下三种

1
2
3
- GL_COLOR_BUFFER_BIT:表明颜色缓冲区。
- GL_DEPTH_BUFFER_BIT:表明深度缓冲区。
- GL_STENCIL_BUFFER_BIT:表明模型缓冲区

glEnable

启用服务器端GL 功能。

glEnable(int cap)和glDisable (int cap)方法可以启用和禁止服务端各种功能。

1
2
3
- GL_ALPHA_TEST————如果启用,将进行alpha 测试
- GL_DEPTH_TEST————如果启用,将进行深度 测试
- GL_BLEND————如果启用,将引入的值与颜色缓冲区中的值混合

glEnableClientState

启用客户端的某项功能。

glEnableClientState(int array) 和glDisableClientState(int array) 启用或禁用客户端的单个功能。默认的,所有客户端功能禁用。

1
2
3
4
5
- GL_VERTEX_ARRAY ——如果启用,顶点矩阵可以用来写入
- GL_COLOR_ARRAY————如果启用,颜色矩阵可以用来写入
- GL_NORMAL_ARRAY—— 如果启用, 法线矩阵可以用来写入
- GL_TEXTURE_COORD_ARRAY——如果启用,纹理坐标矩阵可以用来写入
- GL_POINT_SIZE_ARRAY_OES(OES_point_size_arrayextension)——如果启用,点大小矩阵控制大小以渲染点和点sprites。这时由glPointSize 定义的点大小将被忽略,由点大小矩阵提供的大小将被用来渲染点和点sprites。

这两者的区别应该说是服务端和客户端的区别,glEnable和glDisable是管理服务端功能,glEnableClientState 和glDisableClientState是管理客户端功能。客户端和服务端是如下定义的

1
2
- 客户端:计算机上的具体程序,包括它用到的内存等等
- 服务端:计算机显卡里的OpenGL“模块”,乃至整张拥有OpenGL流水线、硬件实现OpenGL功能的显卡